﻿using Microsoft.AspNetCore.Mvc;
using TeachlyQBank.Models;
using TeachlyQBank.DbServer;
using MySql.Data.MySqlClient;
using System.Data;

namespace TeachlyQBank.Controllers
{
    public class UserAndRoleController : Controller
    {
        private readonly UserServer _userServer;
        private readonly RoleServer _roleServer;
        private readonly PermissionServer _permissionServer;

        public UserAndRoleController(UserServer userServer, RoleServer roleServer ,PermissionServer permissionServer)
        {
            _userServer = userServer;
            _roleServer = roleServer;
            _permissionServer = permissionServer;
        }

        // 功能:返回权限管理视图
        public IActionResult SharePermission() 
        {
            List<Permission> permissions = _permissionServer.SelAllPermission();
            return View(permissions);
        }

        // 功能:导航到添加一个系统权限的视图
        // 参数:不需要传递任何参数
        // 返回:对应的视图
        public IActionResult AddPermission()
        {
            return View();
        }

        // 功能:添加一个系统权限
        // 参数:传递一个Permission里面包含了创建系统权限的名称和内容
        // 返回:重新返回添加系统权限的视图
        public IActionResult AddPermissionSumbit(Permission permission)
        {
            // 对传递回来的数据进行检验
            if (!ModelState.IsValid)
            {
                TempData["Message"] = "输入不合法";
                return RedirectToAction("Enroll");
            }


            if (_permissionServer.AddPermission(permission) > 0)
            {
                //添加成功后的逻辑
                TempData["Message"] = "添加成功！";
            }
            else
            {
                //添加失败后的逻辑
                TempData["Message"] = "添加失败！";
            }
            return View("AddPermission");
        }


        //功能：课程信息界面删除按钮的提交
        //参数：传递一个Course类型的数据，含有数据库影响的条数
        //返回：无论删除是否成功，返回课程信息界面
        public IActionResult DelSumbit1(Permission permission )
        {
            if (_permissionServer.DelPermissionServer(permission) > 0)
            {
                TempData["message"] = "删除成功";
                return RedirectToAction("SharePermission");
            }
            //返回用户信息的视图
            return RedirectToAction("SharePermission");
        }

        // 功能:返回用户角色管理
        public IActionResult ShareUserRole()
        {
            List<UserRole>rolses  = _roleServer.SelAllRoleAndUser();
            return View(rolses);
        }

        // 功能返回角色权限管理页面
        public IActionResult ShareRolePower()
        {
            ViewModel_ShareRole data =new ViewModel_ShareRole();
            data.rolePowers=_userServer.GetAllRolePower();
            data.permissions =_userServer.GetAllPermissions();
            return View(data);
        }

        // 功能:返回登录视图
        public IActionResult Login()
        {
               return View();
        }

        // 功能:返回找回密码的视图
        public IActionResult ForgotKey() 
        {
            return View();
        }

        // 功能:返回注册账号的视图
        public IActionResult Enroll()
        {
            return View();
        }

        // 功能:返回登录后的首页视图
        public IActionResult Index() 
        {
            return View();
        }

        // 功能:登录界面的登录按钮提交
        [HttpPost]
        public IActionResult LoginSumbit(User user)
        {
            // 移除不需要检验的项然后进行检验
            ModelState.Remove("user_name");
            ModelState.Remove("phone");
            if (!ModelState.IsValid)
            {
                TempData["Message"] = "输入不合法";
                return RedirectToAction("Login");
            }

            if ( !_userServer.LoginServer(user) )
            { 
                TempData["Message"] = "账号不存在或是错误的密码,请重试";
                return RedirectToAction("Login");
            }
            return RedirectToAction("Index");
        }
        
        // 功能:注册界面的注册按钮的提交
        // 参数:传递一个User类型的数据,含有注册用的用户信息
        // 返回：返回空的当前页面,注册成功还是失败都会给出对应的提示
        [HttpPost]
        public IActionResult EnrollSumbit(User user)
        {
            // 对传递回来的数据进行检验
            if (!ModelState.IsValid)
            {
                TempData["Message"] = "输入不合法";
                return RedirectToAction("Enroll");
            }

            if ( _userServer.EnrollServer(user) > 0 )
            {
                TempData["Message"] = "注册成功了,快去登录吧！";
                TempData["AutoFillAccount"] = user.user_account;
            }
            else
            {
                TempData["Message"] = "哎呀出现了意料之外的结果呢,注册失败";
            }
            return RedirectToAction("Login");
        }
        
        // 功能:修改用户信息界面的提交按钮
        // 参数:传递一个User类型的数据,含有修改用的用户信息
        // 返回：返回用户信息界面,修改成功还是失败都会给出对应的提示
        public IActionResult UpdSumbit(User user) 
        {
            if (_userServer.UpdServer(user) > 0)
            {
                TempData["Message"] = "修改成功了,快去登录吧！";
                TempData["AutoFillAccount"] = user.user_account;
            }
            else
            {
                TempData["Message"] = "哎呀出现了意料之外的结果呢,修改失败";
            }
            return RedirectToAction("UserInfo");
        }
        
        // 功能:用户信息界面的修改按钮的跳转
        // 参数:传递一个User类型的数据,含有修改用的用户信息
        // 返回：返回用户信息修改界面
        public IActionResult UpdJump(User user)
        {
            User user1 = new User();
            user1 = _userServer.SltUpdServer(user);
            return View("EditUser", user1);
        }


        //功能：用户信息界面删除按钮的提交
        //参数：传递一个User类型的数据，含有数据库影响的条数
        //返回：无论删除是否成功，返回用户信息界面
        public IActionResult DelSumbit(User user)
        {
            if (_userServer.DelUserServer(user) > 0)
            {
                TempData["message"] = "删除成功";
                return RedirectToAction("UserInfo");
            }
            //返回用户信息的视图
            return RedirectToAction("UserInfo");
        }

        //功能：查询出数据库中所有用户信息
        //参数：null
        //返回：返回用户信息界面
        public IActionResult UserInfo()
        {
           List<User> resultList = new List<User>();

            resultList = _userServer.SltServer();
          
            //返回用户信息的视图
            return View("UserInfo", resultList); 
        }

        // 功能:单个用户信息界面的查询的跳转
        // 参数:传递一个User类型的数据,含有查询的用户信息
        // 返回：返回单个用户界面
        public IActionResult SltJump(User user)
        {
            List<User> resultList = new List<User>();

            resultList = _userServer.Slt2Server(user);

            //返回用户信息的视图
            return View("UserInfo", resultList);
        }

        // 功能:用户角色修改的提交
        // 参数:传递一个userRole类型的数据,含有要修改用户的信息
        // 返回:返回单个用户界面
        [HttpPost]
        public IActionResult UpdateUserRoleSumbit(UserRole userRole)
        {
            if (_roleServer.UpdateUserRole(userRole) > 0)
            {
                TempData["message"] = "修改成功了";
            }
            else
            {
                TempData["message"] = "修改失败了";
            }
            return RedirectToAction("ShareUserRole");
         }


        // 功能:系统权限修改的提交
        // 参数:传递一个permission类型的数据,含有要修改系统权限的信息
        // 返回:返回单个系统权限界面
        [HttpPost]
        public IActionResult UpdatePermissionSumbit(Permission permission)
        {
            if (_permissionServer.UpdatePermission(permission) > 0)
            {
                TempData["message"] = "修改成功了";
            }
            else
            {
                TempData["message"] = "修改失败了";
            }
            return RedirectToAction("SharePermission");
        }

        // 添加一个和角色和权限的关联
        public IActionResult AddUserRoleSumbit(RolePower rolePower)
        {
            _userServer.AddUserRole(rolePower);
            return Redirect("ShareRolePower"); 
        }

        [HttpPost]
        public IActionResult DeleteRolePermission(string role_id, string permission_id)
        {
            string message = "删除成功";

            if ( _userServer.DeleteUserRole(role_id,permission_id) > 0 )
            {
                return Json(new { success = true, message = message });
            }
            else
            {
                return Json(new { success = false, message = message });
            }
        }

    }
}
